package com.ruyuan.payment.server.alipay;

import com.alipay.easysdk.kernel.Config;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class AliPayConfig {

    @Resource
    private AliPayProperties aliPayProperties;

    // public static void main(String[] args) throws Exception {
    //     // 1. 设置参数（全局只需设置一次）
    //     Factory.setOptions(getOptions());
    //     try {
    //         // 2. 发起API调用（以创建网站支付为例）
    //         AlipayTradePagePayResponse response = Payment.Page()
    //                 .pay("Apple iPhone11 128G", "1234567890", "5799.00", "www.baidu.com");
    //         // 3. 处理响应或异常
    //         if (ResponseChecker.success(response)) {
    //             System.out.println("调用成功");
    //             System.out.println(JSON.toJSONString(response));
    //         } else {
    //             System.err.println("调用失败，原因：" + response.getBody());
    //         }
    //     } catch (Exception e) {
    //         System.err.println("调用遭遇异常，原因：" + e.getMessage());
    //         throw new RuntimeException(e.getMessage(), e);
    //     }
    // }

    public Config getOptions() {
        Config config = new Config();
        config.protocol = "https";
        config.gatewayHost = aliPayProperties.getGatewayHost();
        config.signType = "RSA2";
        config.appId = aliPayProperties.getAppId();
        // 为避免私钥随源码泄露，推荐从文件中读取私钥字符串而不是写入源码中
        config.merchantPrivateKey = aliPayProperties.getMerchantPrivateKey();
        //注：证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径，优先从文件系统中加载，加载失败后会继续尝试从CLASS_PATH中加载
        // config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径，例如：/foo/appCertPublicKey_2019051064521003.crt -->";
        // config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径，例如：/foo/alipayCertPublicKey_RSA2.crt -->";
        // config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径，例如：/foo/alipayRootCert.crt -->";
        //注：如果采用非证书模式，则无需赋值上面的三个证书路径，改为赋值如下的支付宝公钥字符串即可
        config.alipayPublicKey = aliPayProperties.getAlipayPublicKey();
        //可设置异步通知接收服务地址（可选）
        config.notifyUrl = aliPayProperties.getNotifyUrl();
        //可设置AES密钥，调用AES加解密相关接口时需要（可选）
        config.encryptKey = aliPayProperties.getEncryptKey();
        return config;
    }
}
